package vip.web3.api.utils;

import org.jsoup.Connection;
import vip.web3.common.exception.RRException;
import vip.web3.common.utils.R;
import vip.web3.common.utils.VeryPowerHttpUtils;
import vip.web3.common.utils.YmlUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


/**
 * @author
 * @version V1.0
 * @ClassName: SMSUtils
 * @Description: 发送短信
 */
public class SMSUtils {

    /**
     * 发送短信验证码，使用 云片网
     *
     * @param userTel 手机号码
     * @param useCode 用途标识 1-注册，2-找回密码，3-修改绑定手机号，4-修改登录密码，5-修改支付密码
     * @return
     */
    public static R sendSMS(String userTel, Integer useCode,int vcode) throws IOException, RRException {
        String text = "";
        switch (useCode) {
            case 1:
                text = "您本次操作的验证码为：" + vcode + "，5分钟内有效。如非本人，请勿操作。";
                break;
            case 2:
                text = "您正在执行账户密码找回操作，验证码为：" + vcode + "，5分钟内有效。工作人员不会向您索取，请勿透漏。如非本人，请勿操作!";
                break;
            case 3:
                text = "您正在执行修改登录密码操作，验证码为：" + vcode + "，5分钟内有效。若非本人，请勿操作。";
                break;
            case 4:
                text = "您正在执行修改交易密码操作，验证码为：" + vcode + "，5分钟内有效。为确保账户资金安全，请谨慎操作，若非本人请勿操作。";
                break;
            default:
                return R.error(444, "用途标识码错误");
        }
        String apiKey = "630ddb0da7d894befdb2147bbb804fed";
        singleSend(apiKey, text, userTel, String.valueOf(vcode));
        return R.ok("" + vcode);
    }

    /**
     * 生成时间： 2019/6/20 15:52
     * 方法说明：正式发送
     * 开发人员：llj
     *
     * @param apikey
     * @param text
     * @param userTel
     * @param param
     * @return
     */
    private static R singleSend(String apikey, String text, String userTel, String param) {
        Map<String, String> params = new HashMap<String, String>();
        params.put("apikey", apikey);
        params.put("text", text);
        params.put("mobile", userTel);

        String flag = "true";
        try{
            flag = YmlUtils.getFromYml("props.sendSmsFlag").toString();
        }catch (Exception e){

        }
        if(!"true".equals(flag)){
            return R.ok();
        }
        try {
            String apiUrl = "https://sms.yunpian.com/v2/sms/single_send.json";
            Connection.Response response = VeryPowerHttpUtils.post(apiUrl, params);
            if (null != response && response.statusCode() == 200) {
                return R.ok("" + param);
            } else {
                throw new RRException("请求失败",500);
            }

        } catch (RRException e) {
            return R.error(444, "获取短信失败,请稍后重试");
        } catch (IOException e) {
            e.printStackTrace();
            return R.error(500, "获取短信失败,请稍后重试");
        }
    }

//    /**
//     * 校验上次发送短信的时间,判断是否能再次发送短信
//     *
//     * @param telNum  电话号码
//     * @param useCode 用途标识 1-注册，2-找回密码，3-修改绑定手机号，4-修改登录密码，5-修改支付密码
//     * @return true表示已发送，不能继续发送
//     */
//    public static boolean isSend(String telNum, Integer useCode, SmsCodeService SmsCodeService) {
//
//        SmsCodeEntity param = new SmsCodeEntity(telNum, useCode);
//        SmsCodeEntity smsCode = SmsCodeService.selectTopVcode(param);
//        if (smsCode != null) {
//            Date lastSendTime = smsCode.getSendTime();
//            Long seconds = System.currentTimeMillis() - lastSendTime.getTime();
//            if (seconds > 1 * 60 * 1000) {
//                return false;
//            } else {
//                return true;
//            }
//        } else {
//            return false;
//        }
//    }

//    /**
//     * 校验验证码是否超时失效
//     *
//     * @param telNum  电话号码
//     * @param useCode 用途标识 1-注册，2-找回密码，3-修改绑定手机号，4-修改登录密码，5-修改支付密码
//     * @return true表示失效，需重新获取
//     */
//    public static boolean isOverTime(String telNum, Integer useCode, SmsCodeService SmsCodeService) {
//        SmsCode param = new SmsCode(telNum, useCode);
//        SmsCode smsCode = SmsCodeService.selectTopVcode(param);
//        if (smsCode != null) {
//            Date lastSendTime = smsCode.getSendTime();
//            Long seconds = System.currentTimeMillis() - lastSendTime.getTime();
//            if (seconds > 5 * 60 * 1000) {
//                return true;
//            } else {
//                return false;
//            }
//        } else {
//            return true;
//        }
//    }

//    /**
//     * 仅校验验证码
//     *
//     * @param telNum 电话号码
//     * @param vcode  输入的验证码
//     * @return
//     */
//    public static R checkSMSCode(SmsCodeService SmsCodeService, Integer useCode, String telNum, String vcode) {
//
//        SmsCode param = new SmsCode(telNum, useCode);
//        SmsCode smsCode = SmsCodeService.selectTopVcode(param);
//        if (useCode == null) {
//            return R.error(444, "用途标识码不能为空");
//        } else if (StringUtils.isBlank(vcode)) {
//            return R.error(444, "验证码为空，请重新输入");
//        } else if (smsCode == null) {
//            return R.error(444, "您尚未获取该操作的验证码");
//        } else if (isOverTime(telNum, useCode, SmsCodeService)) {
//            return R.error(444, "验证码已过期，请重新获取");
//        } else {
//            if (smsCode.getVcode() == Integer.parseInt(vcode)) {
//                //验证码输入正确后,删除数据中该类型验证码
//                //SmsCodeService.deleteSmsCode(smsCode);
//                return R.ok();
//            } else {
//                return R.error(444, "验证码不匹配");
//            }
//        }
//
//    }

}
